﻿var ReviewImportModel = new function () {
    this.titleReviewandImport = ko.observable('Chúng tôi đã xác định được một số lỗi và dữ liệu mất tích trong tập tin của bạn.');
    this.DisplayThirdView = ko.observable(false);
    this.ColumnHeaders = ko.observableArray([]);
    this.ErrorRows = ko.observableArray([]);
    this.DisplayErrorRows = ko.observableArray([]);
    this.HasErrorsToDisplay = ko.observable();
    this.ActiveMoreOptions = null;

    this.EditDone = function (data) {
        if (data.ClassName == "col1 done") {
            var _value = data.Value;
            var _idcell = data.CellID;
            var _arrayId = data.CellID.split('-');
            var _row = _arrayId[1];
            var _cell = _arrayId[0];
            var _ArrayErrorRows = ReviewImportModel.ErrorRows();
            _ArrayErrorRows[_row].Cells[_cell].Value = "";

            ReviewImportModel.ErrorRows(_ArrayErrorRows);
            ReviewImportModel.ErrorRows()[_row].Cells[_cell].Value = _value;

            $('#' + _idcell).parent().find('.anchor').css("display", "none");
            $('#' + _idcell).replaceWith("<input type='text' disabled='disabled'  id='" + _idcell + "' value = '" + _value + "' class='text textintable ellipsis' maxlength='500' onkeypress='return Keypress_Event(event,value, id )'/>");
            $('#' + _idcell).removeAttr("disabled");
            $('#' + _idcell).val(_value);
            $('#' + _idcell).focus();
        }
    }


    this.BlurCell = function (data) {
        Update_Cell(data.Value, data.CellID);
    }

    //Count blank
    this.CountBlank = ko.computed(function () {
        var intBlank = 0;
        var intError = 0;
        var countErrorRows = this.ErrorRows().length;
        if (countErrorRows > 0) {
            for (var i = 0; i < countErrorRows; i++) {
                if (!this.ErrorRows()[i].IgnoreWhenImport) {
                    for (var j = 0; j < this.ErrorRows()[i].Cells.length; j++) {
                        if (!this.ErrorRows()[i].Cells[j].IsIgnored) {
                            if (this.ErrorRows()[i].Cells[j].Value == "") {
                                intBlank = intBlank + 1;
                            }
                        }
                    }
                }
            }
        }
        return intBlank;
    }, this);


    // Count Errors
    this.CountError = ko.computed(function () {
        var intError = 0;
        var countErrorRows = this.ErrorRows().length;
        if (countErrorRows > 0) {
            for (var i = 0; i < countErrorRows; i++) {
                if (!this.ErrorRows()[i].IgnoreWhenImport) {
                    for (var j = 0; j < this.ErrorRows()[i].Cells.length; j++) {
                        if (!this.ErrorRows()[i].Cells[j].IsIgnored) {
                            if (this.ErrorRows()[i].Cells[j].IsError == true) {
                                intError = intError + 1;
                            }
                        }
                    }
                }
            }
        }
        if (intError == 0)
        { intError == "no"; }
        return intError;
    }, this);


    this.CountErrorG2 = ko.computed(function () {
        var intError = 0;
        var countErrorRows = this.ErrorRows().length;
        if (countErrorRows > 0) {
            for (var i = 0; i < countErrorRows; i++) {
                if (!this.ErrorRows()[i].IgnoreWhenImport) {
                    if (this.ErrorRows()[i].Cells.length > 2) {
                        for (var j = 2; j < this.ErrorRows()[i].Cells.length; j++) {
                            if (!this.ErrorRows()[i].Cells[j].IsIgnored) {
                                if (this.ErrorRows()[i].Cells[j].IsError == true) {
                                    intError = intError + 1;
                                }
                            }
                        }
                    }
                }
            }
        }
        return intError;
    }, this);



    //Set text for error
    this.txtCountError = ko.computed(function () {
        if (this.CountError() > 1) {

            if (this.CountBlank() == 0) {
                return "Có " + this.CountError() + " lỗi và không trường rỗng trong tài liệu của bạn.";
            } if (this.CountBlank() == 1) {
                return "Có " + this.CountError() + " lỗi và không trường rỗng trong tài liệu của bạn.";
            }
            else {
                return "Có " + this.CountError() + " lỗi và " + this.CountBlank() + " trường rỗng trong tài liệu của bạn.";
            }

        }
        else if (this.CountError() == 1) {
            if (this.CountBlank() == 0) {
                return "có " + this.CountError() + " lỗi và không trường rỗng trong tài liệu của bạn.";
            } if (this.CountBlank() == 1) {
                return "Có " + this.CountError() + " lỗi và " + this.CountBlank() + " trường rỗng trong tài liệu của bạn.";
            }
            else {
                return "Có " + this.CountError() + " lỗi và " + this.CountBlank() + " trường rỗng trong tài liệu của bạn.";
            }
        }
        else {

            if (this.CountBlank() == 0) {
                return "Không có lỗi hoặc mất dữ liệu trong tài liệu của bạn.";
            } if (this.CountBlank() == 1) {
                return "Không có lỗi và " + this.CountBlank() + " trường rỗng trong tài liệu của bạn.";
            }
            else {
                return "Không có lỗi và " + this.CountBlank() + " trường rỗng trong tài liệu của bạn.";
            }
        }

    }, this);
    //Set text for blank fields
    this.txtCountBlank = ko.computed(function () {
        if (this.CountBlank() != 1) {
            return " và trường rỗng";
        }
        else {
            return " hoặc trường rỗng";
        }

    }, this);
    //Show tool tip
    this.ShowScrollTT = ko.computed(function () {

        var scrollleft = $("#gridview").scrollLeft();
        var columnumber = $("#gridview > div.title div.col1").length;

        if (this.CountErrorG2() != 0 && scrollleft == 0 && columnumber > 5) {
            return true;
        }
        else {
            return false;
        }

    }, this);


    this.NoErrorsNoBlanks = ko.computed(function () {
        if (this.CountError() == 0 && this.CountBlank() == 0) {
            return true;
        }
        else {
            return false;
        }

    }, this);

    this.HasError = ko.computed(function () {
        if (this.CountError() > 0) {
            return true;
        }
        else {
            return false;
        }

    }, this);

    this.NoErrorsContainBlanks = ko.computed(function () {
        if (this.CountBlank() != 0 && this.CountError() == 0) {
            return true;
        }
        else {
            return false;
        }

    }, this);

    //Check last rows display
    this.LastRowDisplay = ko.computed(function () {
        var _LastRowDisplay = -1;
        var countErrorRows = this.ErrorRows().length;
        if (countErrorRows > 0) {
            for (var i = countErrorRows - 1; i >= 0; i--) {
                if (!this.ErrorRows()[i].IgnoreWhenImport) {
                    _LastRowDisplay = this.ErrorRows()[i].RowNumber;
                    break;
                }
            }
        }
        return _LastRowDisplay;
    }, this);

    this.ShowSuggestionmsg = ko.computed(function () {
        return this.HasErrorsToDisplay();
    }, this);

    this.ShowDeleteBtn = ko.computed(function () {
        return this.HasErrorsToDisplay();
    }, this);

    //Check show error msg
    this.titleReviewandImport = ko.computed(function () {
        if (this.HasErrorsToDisplay()) {
            return "Chúng tôi đã xác định được một số lỗi và dữ liệu mất tích trong tập tin của bạn."
        }
        else {
            if (this.DisplayErrorRows().length >= 5) {
                return "Dưới đây là một danh sách viết tắt của 5 bản ghi đầu tiên để bạn xem.";
            }
            else {
                return "Dưới đây là một danh sách của " + this.DisplayErrorRows().length + " bản ghi để bạn xem.";
            }
        }
    }, this);

    //Delete row
    this.x_OutRow = function (data) {
        var _ArrayError = ko.utils.arrayFilter(ReviewImportModel.ErrorRows(), function (RowError) {
            if (RowError.RowNumber == data.RowNumber) {
                RowError.IgnoreWhenImport = true;
            }
            return true;
        });
        ReviewImportModel.ErrorRows(_ArrayError);
    };

    //Check show button next
    this.DoNotImportLeadswithErrors = ko.observable(false);
    this.attrNextButton = ko.observable("btn btn-importleads-gray right");
    this.enableNextButton = ko.computed(function () {
        if (this.DoNotImportLeadswithErrors()) {
            this.attrNextButton("btn btn-importleads-blue right");
            return true;
        }
        else {
            if (this.CountError() == 0) {
                this.attrNextButton("btn btn-importleads-blue right");
                return true;
            }
            else {
                this.attrNextButton("btn btn-importleads-gray right");
                return false;
            }
        }
    }, this);

    //Send data to server
    this.SendDataToServer = function () {
        if (this.enableNextButton()) {

            init_send_data_to_server();

            var ManualImportId = $('#StoreManualID').val();
            var DoNotImportLeadswithErrors = this.DoNotImportLeadswithErrors();
            var headColumns = ReviewImportModel.ColumnHeaders();

            console.log('cols: ' + ReviewImportModel.ColumnHeaders());

            var hasError = false;

            for (var i = 0; i < this.ErrorRows().length; i++) {
                var rowData = { "headColumns": headColumns, "errorRow": this.ErrorRows()[i] };
                $.ajax({
                    async: false,
                    type: "POST",
                    url: "/LeadImport/SendDataToServ",
                    contentType: "application/json; charset=utf-8",
                    dataType: "JSON",
                    data: JSON.stringify(rowData),
                    success: function (datareturn) {
                        if (datareturn != '') {
                            $.fancybox.close();
                            showCustomError(datareturn);
                            hasError = true;
                        }
                    },
                    error: function (xhr, status, error) {
                        // Boil the ASP.NET AJAX error down to JSON.
                        var err = eval("(" + xhr.responseText + ")");

                        // Display the specific error raised by the server (e.g. not a
                        // valid value for Int32, or attempted to divide by zero).
                        $.fancybox.close();
                        showCustomError(err);
                        hasError = true;
                    }
                });
                if (hasError == true) {
                    break;
                }
            }

            if (hasError == false) {
                window.location = "/Lead";
            }
        }
    }

    this.GoBackToStepTwo = function () {
        UploadFileModel.DisplayFirstView(false);
        HelpModel.DisplayHelp(false);
        MappingModel.DisplaySecondView(true);
        ReviewImportModel.DisplayThirdView(false);
    }
};

function EditCell(id) 
{
	var _arrayId = id.split('+');
	var _idcell = _arrayId[0];

	var valueofcell = $('#' + _idcell).text();

	if ($('#' + _idcell).is('input')) 
    {
   		valueofcell = $('#' + _idcell).val();
	}

	$('#' + _idcell).replaceWith("<input type='text'  id='" + _idcell + "' onblur='OnBlur(id);' value = '" + valueofcell + "' class='text textintable ellipsis' maxlength='500' onkeypress='return Keypress_Event(event,value, id )'/>");

	$('#' + _idcell).parent().find('.moreoptions').hide();
	$('#' + _idcell).parent().find('.anchor').hide();
	$('#' + _idcell).removeAttr("disabled");
	$('#' + _idcell).focus();

}


function Cancel(id) {
    var _arrayId = id.split('+');
    var _idcell = _arrayId[0];
    //get the index of cell and row
    var _arraycelrow = _idcell.split('-');

    var _cell = _arraycelrow[0];
    var _row = _arraycelrow[1];

    $('#' + _idcell).replaceWith("<input type='text'  id='" + _idcell + "' class='text textintable ellipsis' maxlength='500' onkeypress='return Keypress_Event(event,value, id )'/>");
    $('#' + _idcell).parent().find('.moreoptions').css("display", "none");
    $('#' + _idcell).parent().find('.anchor').css("display", "none");

    var _ArrayErrorRows = ReviewImportModel.ErrorRows();
    var _ArrayValidation = ReviewImportModel.ColumnHeaders()[_cell].RegularExpressions;
    var _IsRequired = ReviewImportModel.ColumnHeaders()[_cell].IsRequired;

    //var _value = data.Value;
    var _check = false;
    if (_IsRequired) {
        _check = false;
    }
    else {
        _check = true;
    }

    if (_check) {
        if (_IsRequired) {
            _ArrayErrorRows[_row].Cells[_cell].Value = "";
            _ArrayErrorRows[_row].Cells[_cell].IsDone = false;
            _ArrayErrorRows[_row].Cells[_cell].IsError = true;
            _ArrayErrorRows[_row].Cells[_cell].ClassName = "col1 error";
            ReviewImportModel.ErrorRows([]);
            ReviewImportModel.ErrorRows(_ArrayErrorRows);
        }
        else {
            _ArrayErrorRows[_row].Cells[_cell].Value = "";
            _ArrayErrorRows[_row].Cells[_cell].IsDone = true;
            _ArrayErrorRows[_row].Cells[_cell].IsError = false;
            _ArrayErrorRows[_row].Cells[_cell].ClassName = "col1 done";
            ReviewImportModel.ErrorRows(_ArrayErrorRows);
        }
    }
    else {
        _ArrayErrorRows[_row].Cells[_cell].Value = "";
        _ArrayErrorRows[_row].Cells[_cell].IsDone = false;
        _ArrayErrorRows[_row].Cells[_cell].IsError = true;
        _ArrayErrorRows[_row].Cells[_cell].ClassName = "col1 error";
        ReviewImportModel.ErrorRows(_ArrayErrorRows);
    }
    $('#' + _idcell).parent().removeClass('error');
    $('#' + _idcell).removeAttr("disabled");
    $('#' + _idcell).focus();
}

function IgnoreAllValidation(id) {
    var _arrayignore = id.split('+');
    var _rowandcell = _arrayignore[0];

    var _arrayId = _rowandcell.split('-');
    var _cell = _arrayId[0];

    var _row = _arrayId[1];
    if ($("#" + _rowandcell).is('input')) {
        var value = $("#" + _rowandcell).val();
    }
    else {

        var value = $("#" + _rowandcell).text();
    }

    value = $.trim(value);
    $('.' + _cell + 'ignoreall').find('.moreoptions').hide();
    $('.' + _cell + 'ignoreall').find('.anchor').hide();


    var _ArrayErrorRows = ReviewImportModel.ErrorRows();
    _ArrayErrorRows[_row].Cells[_cell].Value = value;
    var _IsRequired = ReviewImportModel.ColumnHeaders()[_cell].IsRequired;
    for (var i = 0; i < _ArrayErrorRows.length; i++) {
        var _check = false;

        if (_IsRequired) {
            if (_ArrayErrorRows[i].Cells[_cell].Value != "") {
                _check = true;
            }
            else {
                _check = false;
            }
        }
        else {
            _check = true;
        }
        if (_check) {
            _ArrayErrorRows[i].Cells[_cell].IsDone = true;
            _ArrayErrorRows[i].Cells[_cell].IsError = false;
            _ArrayErrorRows[i].Cells[_cell].ClassName = "col1 done";
            _ArrayErrorRows[i].Cells[_cell].IgnoreValidation = true;

            $("#gridview div.line,#grid-one-step3 div.line").each(function () {
                $(this).find('.' + _cell + 'ignoreall').removeClass('error').addClass('done');

                if ($('#' + _rowandcell).is('input')) {
                    $("#" + _rowandcell).replaceWith(" <span class='w ellipsis' id='" + _rowandcell + "' style='min-height: 21px;'>" + value + "</span>");
                }
            });

        }
        else {
            _ArrayErrorRows[i].Cells[_cell].IsDone = false;
            _ArrayErrorRows[i].Cells[_cell].IsError = true;
            _ArrayErrorRows[i].Cells[_cell].ClassName = "col1 error";
            _ArrayErrorRows[i].Cells[_cell].IgnoreValidation = false;
        }
    }
    ReviewImportModel.ErrorRows(_ArrayErrorRows);
}

function IgnoreValidation(id) {
    var _arrayignore = id.split('+');
    var _rowandcell = _arrayignore[0];

    var _arrayId = _rowandcell.split('-');
    var _cell = _arrayId[0];
    var _row = _arrayId[1];
    if ($('#' + _rowandcell).is('input')) {
        var value = $("#" + _rowandcell).val();
        $("#" + _rowandcell).replaceWith(" <span class='w ellipsis' id='" + _rowandcell + "' style='min-height: 21px;'>" + value + "</span>");
    }
    else {
        var value = $("#" + _rowandcell).text();
    }
    value = $.trim(value);

    var _ArrayErrorRows = ReviewImportModel.ErrorRows();
    var _IsRequired = ReviewImportModel.ColumnHeaders()[_cell].IsRequired;
    var _check = false;

    if (_IsRequired) {
        if (value != "") {
            _check = true;
        }
        else {
            _check = false;
        }
    }
    else {
        _check = true;
    }

    if (_check) {
        _ArrayErrorRows[_row].Cells[_cell].Value = value;
        _ArrayErrorRows[_row].Cells[_cell].IsDone = true;
        _ArrayErrorRows[_row].Cells[_cell].IsError = false;
        _ArrayErrorRows[_row].Cells[_cell].ClassName = "col1 done";
        $("#" + _rowandcell).parent().removeClass('error').addClass('done');
        $("#" + _rowandcell).parent().find('.moreoptions').hide();
        $("#" + _rowandcell).parent().find('.anchor').hide();
        _ArrayErrorRows[_row].Cells[_cell].IgnoreValidation = true;

        ReviewImportModel.ErrorRows(_ArrayErrorRows);
    }
    else {
        _ArrayErrorRows[_row].Cells[_cell].Value = value;
        _ArrayErrorRows[_row].Cells[_cell].IsDone = false;
        _ArrayErrorRows[_row].Cells[_cell].IsError = true;
        _ArrayErrorRows[_row].Cells[_cell].ClassName = "col1 error";
        _ArrayErrorRows[_row].Cells[_cell].IgnoreValidation = false;
        ReviewImportModel.ErrorRows(_ArrayErrorRows);
    }
}

function OnBlur(id) {
    var _arrayId = id.split('+');
    var _idcell = _arrayId[0];

    _valuecell = $('#' + _idcell).val();
    Update_Cell(_valuecell, _idcell);
}